﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Cesave.Infrastructure.CrossCutting.Logging;
using Cesave.Infrastructure.CrossCutting.IoC;
using Cesave.DistributedServices.Core.ErrorHandlers;
using System.ServiceModel;
using Cesave.Domain.PermisosModule.Contracts.Usuarios;

namespace Cesave.DistributedServices.PermisosModule
{
	public partial class PermisosModuleService
	{
		#region IPermisosModuleService Members

		/// <summary>
		/// 
		/// </summary>
		/// <param name="usuario"></param>
		public void AddUsuario(Domain.PermisosModule.Entities.Usuario usuario)
		{
			try
			{
				IUsuarioService usuarioService = IoCFactory.Resolve<IUsuarioService>();
				usuarioService.AddUsuario(usuario);
			}
			catch (Exception ex)
			{
				ITraceManager traceManager = IoCFactory.Resolve<ITraceManager>();
				traceManager.TraceError(ex.Message);

				ServiceError detail = ServiceError.Factory(ex.Message);
				throw new FaultException<ServiceError>(detail);
			}
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="usuario"></param>
		public void ChangeUsuario(Domain.PermisosModule.Entities.Usuario usuario)
		{
			try
			{
				IUsuarioService usuarioService = IoCFactory.Resolve<IUsuarioService>();
				usuarioService.ChangeUsuario(usuario);
			}
			catch (Exception ex)
			{
				ITraceManager traceManager = IoCFactory.Resolve<ITraceManager>();
				traceManager.TraceError(ex.Message);

				ServiceError detail = ServiceError.Factory(ex.Message);
				throw new FaultException<ServiceError>(detail);
			}
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="juntaGuid"></param>
		/// <returns></returns>
		public List<Domain.PermisosModule.Entities.Usuario> FindUsuariosByJunta(Guid juntaGuid)
		{
			try
			{
				IUsuarioService usuarioService = IoCFactory.Resolve<IUsuarioService>();
				return usuarioService.FindUsuariosByJunta(juntaGuid);
			}
			catch (Exception ex)
			{
				ITraceManager traceManager = IoCFactory.Resolve<ITraceManager>();
				traceManager.TraceError(ex.Message);

				ServiceError detail = ServiceError.Factory(ex.Message);
				throw new FaultException<ServiceError>(detail);
			}
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="estadoGuid"></param>
		/// <returns></returns>
		public List<Domain.PermisosModule.Entities.Usuario> FindUsuariosByEstado(Guid estadoGuid)
		{
			try
			{
				IUsuarioService usuarioService = IoCFactory.Resolve<IUsuarioService>();
				return usuarioService.FindUsuariosByEstado(estadoGuid);
			}
			catch (Exception ex)
			{
				ITraceManager traceManager = IoCFactory.Resolve<ITraceManager>();
				traceManager.TraceError(ex.Message);

				ServiceError detail = ServiceError.Factory(ex.Message);
				throw new FaultException<ServiceError>(detail);
			}
		}

		/// <summary>
		/// 
		/// </summary>
		/// <param name="padron"></param>
		/// <param name="subPadron"></param>
		/// <param name="control"></param>
		/// <returns></returns>
		public Domain.PermisosModule.Entities.Usuario FindUsuarioByPadron(string padron, string subPadron, string control)
		{
			try
			{
				IUsuarioService usuarioService = IoCFactory.Resolve<IUsuarioService>();
				return usuarioService.FindUsuarioByPadron(padron, subPadron, control);
			}
			catch (Exception ex)
			{
				ITraceManager traceManager = IoCFactory.Resolve<ITraceManager>();
				traceManager.TraceError(ex.Message);

				throw new FaultException<ServiceError>(ServiceError.Factory(ex.Message));
			}
		}

		#endregion
	}
}
